package com.itany.corejava.code08_常用类.包装类;

/**
 * @author 石小俊
 * @date 2023年04月27日 13:57
 */
public class Test02_装箱与拆箱 {

    public static void main(String[] args) {
        int i = 1;
        // 装箱
        // JDK5之前必须手动装箱
        // 手动装箱
        Integer integer = new Integer(i);
        // JDK5之后支持自动装箱
        Integer integer2 = i;


        // 拆箱
        // JDK5之前手动拆箱
        int i1 = integer.intValue();
        // JDK5之后支持自动拆箱
        int i2 = integer;


        int i3 = 10;
        int i4 = 10;
        System.out.println(i3 == i4);   // true
        Integer integer3 = new Integer(10);
        Integer integer4 = new Integer(10);
        System.out.println(integer3 == integer4); // false

        // 在进行运算时发生了自动拆箱的操作
        // 当int类型与Integer类型的值进行比较时
        // 会自动将Integer拆箱为int类型
        // 因此,此时相当于两个int类型的值的比较
        // 即:此时比较的是两个int类型数据的值的大小
        System.out.println(i3 == integer3); // true


        // 直接定义数字默认是int类型
        // 由于int不是Object子类,会自动进行装箱的操作,将int类型转换成Integer
        // 此时就属于父类的引用指向了子类的对象,多态
        // 这段代码进行了装箱+多态的操作
        Object obj = 10;
        // int i = 10;
        // Object obj = new Integer(i);

        // 直接写值的时候都表示使用的是基本数据类型
        // 因此此时执行的是:调用了int
        test(1);
    }


    public static void test(int i) {
        System.out.println("调用了int");
    }

    public static void test(Integer i) {
        System.out.println("调用了Integer");
    }

}
